Technote 1106

Update: Borrowed AFP Sessions


ñ⁄éü

ÇÕÇ∂ÇflÇ…

ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã

Ç‹ÇΔÇfl
Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…É}ÉEÉìÉgÇ≥ÇÍÇΩ AFP É{ÉäÉÖÅ[ÉÄÇÃÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇÃéÿópï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅBÉ}ÉEÉìÉgÇ≥ÇÍÇΩ AFP É{ÉäÉÖÅ[ÉÄÇÃÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÃèÓïÒÇéÊìæÇ∑ÇÈï˚ñ@LJê‡ñæÇµÇ‹Ç∑ÅB
DZÇà TECHNOTE ÇÕÅAAFP ÉZÉbÉVÉáÉìÇÃéÿópÇ…ä÷Ç∑ÇÈà»ëOÇà TECHNOTE ÇÃâ¸î≈Ç≈ÅAAppleShare Client 3.7 à»ç~ÇégópÇ∑ÇÈÉVÉXÉeÉÄÇ…äYìñǵNjÇ∑ÅBǪÇÍà»ëOÇÃÉoÅ[ÉWÉáÉìÇà AppleShare Client DžǬǢǃÇÕÅwTechnote NW 16ÅxÇ…ãLç⁄Ç≥ÇÍǃǢÇÈèÓïÒDžǵÇΩǙǡǃÇ≠ÇæÇ≥Ç¢ÅB


ÅñçXêVâ”èäÇÕëæéöÇ®ÇÊÇ—éŒëÃÇ≈é¶ÇµÇ‹Ç∑ÅB

ÇÕÇ∂ÇflÇ…

AppleShare Chooser Extension ÇÕÅAFile Manager ÉRÉ}ÉìÉhÇÅAǪÇÃÉRÉ}ÉìÉhÇΔìôâøÇ» AFP ÉRÉ}ÉìÉhÇ…ïœä∑Ç∑ÇÈÇΩÇflÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAAppleTalk Filing Protocol (AFP) ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ëŒÇµÇƒÅAÇŸÇΔÇÒÇ«Ç∑Ç◊ǃÇÃÉ{ÉäÉÖÅ[ÉÄ/ÉtÉ@ÉCÉãÉAÉNÉZÉXëÄçÏÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕí èÌÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈÇÃÇ… File Manager ÇåƒÇ—èoǵNjÇ∑ÅBFile Manager ÇÕÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄ (AppleShare Chooser Extension ÇÃàÍïî) ÇåƒÇ—èoǵNjÇ∑ÅBAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAFile Manager ÉRÅ[ÉãÇ AFP ÉRÅ[ÉãÇ…ïœä∑ǵÅA.AFPTranslatorÉhÉâÉCÉoÇåƒÇ—èoǵNjÇ∑ÅB.AFPTranslatorÉhÉâÉCÉoÇÕÅAAFP ÉRÅ[ÉãÇÉTÅ[ÉoÇ÷ëóÇËÅAǪÇÃâûìöÇ AppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…ï‘ǵNjÇ∑ÅBÉTÅ[ÉoÇ÷ÇÃê⁄ë±åoòHÇÕÅAÉRÉlÉNÉVÉáÉìÅEÉgÉâÉìÉXÉ|Å[ÉgÅEÉ^ÉCÉvÇ…ÇÊÇËÅAAppleTalk Ç© TCP/IP ÇÃÇ¢Ç∏ÇÍǩDžǻÇËÇ‹Ç∑ÅBAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAâûìöÉfÅ[É^ǙdžÇÍnjǪÇÍÇïœä∑ǵÅAFile Manager Ç…ï‘ǵÅAFile Manager ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ï‘ǵNjÇ∑ÅB9ê} 1 Ç…ÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔ AFP ÉTÅ[ÉoÇÃí èÌÇÃÉRÉ}ÉìÉhÇÃó¨ÇÍÇé¶ÇµÇ‹Ç∑ÅB

ê} 1: ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ File Manager åoóRÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇégǧóléq

ǵǩǵǻǙÇÁÅAAFP Ç™ÉTÉ|Å[ÉgÇ∑ÇÈëÄçÏÇÃÇ§ÇøÅAFile Manager Ç…ÇÕäYìñÇ∑ÇÈLJÇÃǙǻǢèÍçáǙdžÇËÇ‹Ç∑ÅBDZÇÃÇÊǧǻèÍçáÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅA.AFPTranslatorÉhÉâÉCÉoåoóRÇ≈ AFP ÉTÅ[ÉoÇ… AFP ÉRÉ}ÉìÉhÇìnÇ≥Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

AFP ÉRÉ}ÉìÉhÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÕÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃä‘Ç… AFP ÉZÉbÉVÉáÉìÇ™ïKóvÇ≈Ç∑ÅBÉZÉbÉVÉáÉìǙǻǢèÍçáÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅA.AFPTranslatorÉhÉâÉCÉoÇégÇ¢ÅAafpLogin (džÇÈÇ¢ÇÕ afpLoginCont) Ç≈ÉZÉbÉVÉáÉìÇäJÇ©Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÇΔDZÇÎÇ™ÅAAFP É{ÉäÉÖÅ[ÉÄÇ™Ç∑Ç≈Ç…Ç–ÇΔǬÇ≈LJ Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ…ÇÊǡǃÉ}ÉEÉìÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇÕÇ∑Ç≈Ç…äJÇ©ÇÍǃǢNjÇ∑ÅBǪÇÃÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇ.AFPTranslator ÉhÉâÉCÉo (AppleShare Chooser Extension ÇÃï ÇÃïîï™) Ç©ÇÁéÊìæÇ∑ÇÍÇŒÅAǪÇÃÉZÉbÉVÉáÉìÇégǡǃÉtÉ@ÉCÉãÉTÅ[ÉoÇ… AFP ÉRÉ}ÉìÉhÇ™ëóÇÍÇ‹Ç∑ÅBÇΩÇæÇµêßñÒǙdžÇËÇ‹Ç∑ÅBê} 2 Ç…ÅAMacintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÅA.AFPTranslator Ç©ÇÁéÿópǵÇΩÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇégǡǃÅA.AFPTranslatorÉhÉâÉCÉoåoóRÇ≈íºê⁄ AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈèÍçáÇÃÉRÉ}ÉìÉhÇÃó¨ÇÍÇé¶ÇµÇ‹Ç∑ÅB

ê} 2: ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÅAéÿópǵÇΩÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇégÇ¢ÅA.AFPTranslatorÉhÉâÉCÉoåoóRÇ≈ÉtÉ@ÉCÉãÉTÅ[ÉoÇégǧóléq

TECHNOTE ÇÃéüÇÃêflÇ≈ÇÕÅA.AFPTranslator ÉhÉâÉCÉoÇ©ÇÁÅAÉ}ÉEÉìÉgçœÇ›Çà AFP É{ÉäÉÖÅ[ÉÄÇà AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇéÊìæÇ∑ÇÈï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅBéÿópǵÇΩ AFP ÉZÉbÉVÉáÉìÇégópÇ∑ÇÈèÍçáÇ…íçà”Ç∑Ç◊Ç´êßñÒéñçÄLJóÒãìǵNjÇ∑ÅB

ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã

AppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAFile Manager ÉRÉ}ÉìÉhÇà AFP ÉRÉ}ÉìÉhÇ÷ÇÃïœä∑ÅAAFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇÃä«óùÇçsǢNjÇ∑ÅB.AFPTranslator ÉhÉâÉCÉoÇ÷ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉXÉeÅ[É^ÉXÉRÅ[Éã (AFPSVolInfo) Çî≠çsÇ∑ÇÈÇΔÅAÉhÉâÉCÉoÇ™ï€ë∂Ç∑ÇÈèdóvÇ»èÓïÒÇÇ¢Ç≠ǬǩéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBAFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™ï‘Ç∑èÓïÒÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB

  • ÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇäJÇ≠ÇÃÇ…égópÇ∑ÇÈ AFP ÇÃÉoÅ[ÉWÉáÉìÅBDZÇÍÇ…ÇÊÇËÅADZÇÃÉZÉbÉVÉáÉìÇ≈égópâ¬î\Ç» AFP ÉRÅ[ÉãÇ™ÇÌÇ©ÇËÇ‹Ç∑ÅB
  • AFPÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ - ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜÇÕÅAAFP ÉRÅ[ÉãÇçsǧç€Ç…ÅA.AFPTranslatorÉhÉâÉCÉoÇ…ìnǵNjÇ∑ÅB
  • AFP É{ÉäÉÖÅ[ÉÄ ID î‘çÜ - É{ÉäÉÖÅ[ÉÄ ID î‘çÜÇïKóvÇΔÇ∑ÇÈ AFP ÉRÅ[ÉãÇ…ìnÇ∑î‘çÜÇ≈Ç∑ÅB
  • ÉtÉ@ÉCÉãÉTÅ[ÉoÇÃÉCÉìÉ^Å[ÉlÉbÉgÅEÉ\ÉPÉbÉgÉAÉhÉåÉX - DZÇÍÇÕÅAFile Manager Çà PBHGetVolParms ä÷êîÇ™ GetVolParmsInfoBuffer ÉåÉRÅ[ÉhÇà vMServerAdr ÉtÉBÅ[ÉãÉhÇ…ï‘Ç∑ÉCÉìÉ^Å[ÉlÉbÉgÅEÉ\ÉPÉbÉgÉAÉhÉåÉXÇΔìØÇ∂Ç≈Ç∑ÅB
  • ÉZÉbÉVÉáÉìämóßÇÃÇΩÇflÇ…égópÇ∑ÇÈÉÜÅ[ÉUîFèÿï˚éÆ (UAM) - File Manager Çà PBHGetLogInInfo ä÷êîÇ™ ioObjType Ç…ï‘Ç∑ÉèÅ[ÉhílÅAÇ®ÇÊÇ— File Manager Çà PBGetVolMountInfo ä÷êîÇ™ AFPVolMountInfo ÉåÉRÅ[ÉhÇà uamType ÉtÉBÅ[ÉãÉhÇ…ï‘Ç∑ÉèÅ[ÉhílÇΔìØÇ∂Ç≈Ç∑ÅB
  • ÉZÉbÉVÉáÉìämóßÇ≈égópÇ∑ÇÈÉÜÅ[ÉUñº - DZÇÍÇÕÅAFile Manager Çà PBHGetLogInInfo ä÷êîÇ™ ioObjNamePtr ÇÃéwÇ∑ï∂éöóÒóÃàÊÇ…ï‘Ç∑ï∂éöóÒÅAÇ®ÇÊÇ— FileManager Çà PBGetVolMountInfo ä÷êîÇ™ AFPVolMountInfo ÉåÉRÅ[ÉhÇà AFPData ÉtÉBÅ[ÉãÉhì‡Ç…ï‘Ç∑ï∂éöóÒ (AFPVolMountInfo ÉåÉRÅ[ÉhÇà AFPData ÉtÉBÅ[ÉãÉhì‡ÇÃÉÜÅ[ÉUñºÇÃäiî[à íuÇÕ userNameOffset ÉtÉBÅ[ÉãÉhÇ≈åàÇ‹ÇËÇ‹Ç∑) ÇΔìØÇ∂Ç≈Ç∑ÅB
  • ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉìÇΔÉ}ÉXÉN - ÉfÉBÉXÉNÉhÉâÉCÉoÇ÷Çà csCode = 21 ÇÃêßå‰ÉRÅ[ÉãÇ™ï‘Ç∑ 256 ÉoÉCÉgÇÃÉAÉCÉRÉìÇΔÉ}ÉXÉNÇΔìØÇ∂Ç≈Ç∑ÅB
  • Finder ÇÃÅgèÓïÒÇå©ÇÈÅhÉ_ÉCÉAÉçÉOÇ… (ÅgèÍèä:ÅhÇ…ë±ÇØÇƒ) ï\é¶Ç≥ÇÍÇÈï∂éöóÒÅBÉfÉBÉXÉNÉhÉâÉCÉoÇ÷Çà csCode = 21 ÇÃêßå‰ÉRÅ[ÉãÇ™ï‘Ç∑ï∂éöóÒÇΔìØÇ∂Ç≈Ç∑ÅB

è„ãLÇÃèÓïÒåQÇÕÅAGetVolSessInfoRec ÉåÉRÅ[ÉhÇ…ï‘Ç≥ÇÍÇ‹Ç∑ÅBGetVolSessInfoRec ÉåÉRÅ[ÉhÇÕéüÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB

    GetVolSessInfoRec = RECORD
        sessAFPVersion: Integer;           {AFP ÉoÅ[ÉWÉáÉìî‘çÜ: }
                                           {    1 = ÉoÅ[ÉWÉáÉì 1.1 }
                                           {    2 = ÉoÅ[ÉWÉáÉì 2.0 }
                                           {    3 = ÉoÅ[ÉWÉáÉì 2.1 }
                                           {    4 = ÉoÅ[ÉWÉáÉì 2.2 }
        sessReferenceNumber: Integer;      {AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ}
        sessAFPVolID: Integer;             {AFP É{ÉäÉÖÅ[ÉÄ ID}
        sessServerAddress: OTAddressPtr;   {ÉTÅ[ÉoÉCÉìÉ^Å[ÉlÉbÉgÉAÉhÉåÉX}
        sessUAMType: Integer;              {ÉÜÅ[ÉUîFèÿï˚éÆ: }
                                           {    1 = ÉÜÅ[ÉUîFèÿǻǵ }
                                           {    2 = ÉNÉäÉAÉeÉLÉXÉgÉpÉXÉèÅ[Éh }
                                           {    3 = óêêîåä∑ }
                                           {    6 = ëoï˚å¸óêêîåä∑ }
        sessUserNamePtr: StringPtr;        {ÉÜÅ[ÉUñºï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
        sessVolIconPtr: Ptr;               {ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉì/É}ÉXÉNÇ÷ÇÃÉ|ÉCÉìÉ^}
        sessWhereStringPtr: StringPtr;     {à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
      END;

åxçê:
sessUserNamePtrÅAsessVolIconPtrÅAsessServerAddressÅAsessWhereStringPtr ÇÕÅA.AFPTranslator ÉhÉâÉCÉoÇ™ï€éùÇ∑ÇÈÉfÅ[É^ÇéwǵNjÇ∑ÅBégópÇ∑ÇÈëOÇ…ÉvÉçÉOÉâÉÄë§ÇÃïœêîÇ…ÉfÅ[É^ÇÉRÉsÅ[ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

.AFPTranslator ÉhÉâÉCÉoÇà AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™égópÇ∑ÇÈ ParamBlockRec ÉåÉRÅ[ÉhÇÃÉtÉBÅ[ÉãÉhÇÕéüÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB

-> 12 ioCompletion (long) äÆóπÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^
<- 16 ioResult (word) åãâ ÉRÅ[Éh
-> 24 ioRefNum (word) AFPTranslator ÉäÉtÉ@ÉåÉìÉXî‘çÜ
-> 26 csCode (word) ǬÇÀÇ… AFPSVolInfo
-> 28 ioMisc (long) É{ÉäÉÖÅ[ÉÄÇà VCB Ç÷ÇÃÉ|ÉCÉìÉ^
-> 32 ioBuffer (long) GetVolSessInfoRec Ç÷ÇÃÉ|ÉCÉìÉ^
-> 36 ioReqCount (long) óvãÅÇ∑ÇÈÉfÅ[É^ÇÃÉTÉCÉY
<- 40 ioActCount (long) ï‘Ç≥ÇÍÇΩÉfÅ[É^ÇÃÉTÉCÉY

DZDZǩÇÁÉpÉâÉÅÅ[É^ÉuÉçÉbÉNÉtÉBÅ[ÉãÉhÇ…ä÷ǵǃè⁄ǵÇ≠ê‡ñæÇµÇ‹Ç∑ÅB

  • ioCompletion (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ™îÒìØä˙Ç≈åƒÇŒÇÍÇΩèÍçáÇÕÅAäÆóπÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Ç© NIL Ç≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
  • ioResult (Word ÇÃåãâ ÉRÅ[Éh) ä÷êîÇÃñflÇËíl
  • ioRefNum (Word ÇÃì¸óÕíl) .AFPTranslator ÉhÉâÉCÉoÇÃÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜ
  • csCode (Word ÇÃì¸óÕíl) èÌÇ… AFPSVolInfo (124)
  • ioMisc (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) É{ÉäÉÖÅ[ÉÄÇÃêßå‰ÉuÉçÉbÉN (VCB) Ç÷ÇÃÉ|ÉCÉìÉ^
  • ioBuffer (Longword ÇÃì¸óÕÉ|ÉCÉìÉ^) ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÇ™ï‘Ç≥ÇÍÇÈ GetVolSessInfoRec Ç÷ÇÃÉ|ÉCÉìÉ^
  • ioReqCount (Longword ÇÃì¸óÕíl) ioBuffer Ç™éwÇ∑ GetVolSessInfoRec ÇÃÉTÉCÉY
  • ioActCount (Longword ÇÃåãâ íl) ioBuffer Ç™éwÇ∑ GetVolSessInfoRec Ç…ï‘Ç≥ÇÍÇΩÉfÅ[É^ÇÃÉTÉCÉY

AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇÕéüÇÃåãâ ÉRÅ[ÉhÇï‘ǵNjÇ∑ÅB

  • noErr (0) ÉGÉâÅ[ǻǵÅB
  • badUnitErr (-21) ÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇ™ê≥ǵÇ≠ǻǢÅB
  • unitEmptyErr (-22) ÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇ™ê≥ǵÇ≠ǻǢÅB
  • notOpenErr (-28) ÉhÉâÉCÉoÇ™Ç‹ÇæäJÇ©ÇÍǃǢǻǢÅB
  • statusErr (-18) ÉhÉâÉCÉoÇÕDZÇÃÉXÉeÅ[É^ÉXÉRÅ[ÉãÇ…âûìöÇ≈ǴǻǢÅB
  • paramErr (-50) ioReqCount Ç™ GetVolSessInfoRec ÉåÉRÅ[ÉhÇ™è¨Ç≥Ç∑ǨÇÈDZÇΔÇé¶ÇµÇƒÇ¢ÇÈÇ©ÅAioMisc Ç≈éwíËÇ≥ÇÍÇΩÉ{ÉäÉÖÅ[ÉÄÇ™.AFPTranslator ÉhÉâÉCÉoÇÃèäóLÇ≈ÇÕǻǢÅB

éüÇÃÉRÅ[ÉhÇÕÅAAFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇégǡǃÅAÉ{ÉäÉÖÅ[ÉÄÉäÉtÉ@ÉåÉìÉXî‘çÜÇ≈éwíËÇ≥ÇÍÇΩÉ{ÉäÉÖÅ[ÉÄÇÃÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÇéÊìæÇ∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB

    USES
      AppleTalk, Files;

    CONST
      { AFP ÉoÅ[ÉWÉáÉìî‘çÜ }
      AFPVer1_1 = 1;  { AFP ÉoÅ[ÉWÉáÉì 1.1 }
      AFPVer2_0 = 2;  { AFP ÉoÅ[ÉWÉáÉì 2.0 }
      AFPVer2_1 = 3;  { AFP ÉoÅ[ÉWÉáÉì 2.1 }
      AFPVer2_2 = 4;  { AFP ÉoÅ[ÉWÉáÉì 2.2 }

      AFPSVolInfo = 124;  { ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄèÓïÒÉRÅ[Éã }

    TYPE
      GetVolSessInfoRec = RECORD
          sessAFPVersion: Integer;           {AFP ÉoÅ[ÉWÉáÉìî‘çÜ}
          sessReferenceNumber: Integer;      {AFP ÉZÉbÉVÉáÉìÅEÉäÉtÉ@ÉåÉìÉXî‘çÜ}
          sessAFPVolID: Integer;             {AFP É{ÉäÉÖÅ[ÉÄ ID}
          sessServerAddress: OTAddressPtr;   {ÉTÅ[ÉoÉCÉìÉ^Å[ÉlÉbÉgÉAÉhÉåÉX}
          sessUAMType: Integer;              {ÉÜÅ[ÉUîFèÿï˚éÆ}
          sessUserNamePtr: StringPtr;        {ÉÜÅ[ÉUñºï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
          sessVolIconPtr: Ptr;               {ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉAÉCÉRÉì/É}ÉXÉNÇ÷ÇÃÉ|ÉCÉìÉ^}
          sessWhereStringPtr: StringPtr;     {à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^}
        END;

    FUNCTION GetVolSessionInfo (theVRefNum: Integer;
                 VAR theVolSessInfoRec: GetVolSessInfoRec): OSErr;
      CONST
        TSigWord = $4244; { HFS É{ÉäÉÖÅ[ÉÄÉVÉOÉlÉ`ÉÉ }
      VAR
        pb: ParamBlockRec;
        vcbPtr: QElemPtr;
        afpTranslatorRefNum: Integer;
        err: OSErr;
    BEGIN
      { .AFPTranslator ÉhÉâÉCÉoÇà refNum ÇéÊìæ }
      err := OpenDriver('.AFPTranslator', afpTranslatorRefNum);
      IF err  noErr THEN
        BEGIN { ÉhÉâÉCÉoÇ™ÉIÅ[ÉvÉìÇ≈ǴǻǢ }
          GetVolSessionInfo := err;
          Exit(GetVolSessionInfo);
        END;

      { É{ÉäÉÖÅ[ÉÄÉäÉtÉ@ÉåÉìÉXî‘çÜÇ≈ VCB Çî≠å© }
      QHdrPtr(vcbPtr) := GetVCBQHdr;  { VCB ÉLÉÖÅ[ÉwÉbÉ_Ç÷ÇÃÉ|ÉCÉìÉ^ }
      vcbPtr := QHdrPtr(vcbPtr)^.qHead;  { ç≈èâÇà VCB Ç÷ÇÃÉ|ÉCÉìÉ^ }
      WHILE (vcbPtr  NIL) DO
        BEGIN
          IF VCB(vcbPtr^).vcbSigWord = TSigWord THEN { HFS É{ÉäÉÖÅ[ÉÄ Ç≈Ç»ÇØÇÍnjǻÇÁǻǢ }
            IF VCB(vcbPtr^).vcbVRefNum = theVRefNum THEN
              Leave;  { VCB Ç™å©Ç¬Ç©Ç¡ÇΩ }
          vcbPtr := vcbPtr^.vcbQElem.qLink;  { éüÇà VCB }
        END;
      IF (vcbPtr = NIL) THEN
        BEGIN  { É{ÉäÉÖÅ[ÉÄÇ™å©Ç¬Ç©ÇÁǻǢ }
          GetVolSessionInfo := nsvErr;
          Exit(GetVolSessionInfo);
        END;

      { É{ÉäÉÖÅ[ÉÄÉZÉbÉVÉáÉìèÓïÒÇéÊìæÇ∑ÇÈÉXÉeÅ[É^ÉXÉRÅ[Éã }
      WITH pb DO
        BEGIN
          ioRefNum := afpTranslatorRefNum;
          csCode := AFPSVolInfo;
          ioMisc := Ptr(vcbPtr);
          ioBuffer := @theVolSessInfoRec;
          ioReqCount := LongInt(sizeof(GetVolSessInfoRec));
        END;
      GetVolSessionInfo := PBStatus(@pb, FALSE);
    END;

    FUNCTION DoGetVolSessionInfo (vRefNum: Integer): OSErr;
      VAR
        err: OSErr;
        myVolSessInfoRec: GetVolSessInfoRec;
        myIconHandle: Handle;
        myUserName: Str31;
        myWhereString: Str255;
    BEGIN
      err := GetVolSessionInfo(vRefNum, myVolSessInfoRec);
      IF err = noErr THEN
        BEGIN
          WITH myVolSessInfoRec DO
            BEGIN
              { ï∂éöóÒïœêîÇ…ÉÜÅ[ÉUñºÇÉRÉsÅ[ }
              myUserName := sessUserNamePtr^;

              { ÉnÉìÉhÉãÇäÑÇËìñǃÅAǪDZDžÉAÉCÉRÉìÇà⁄Ç∑ }
              myIconHandle := NewHandle(kLargeIconSize);
              IF myIconHandle = NIL THEN
                BEGIN
                  DoGetVolSessionInfo := MemError;
                  Exit(DoGetVolSessionInfo);
                END;
              BlockMove(sessVolIconPtr, myIconHandle^, kLargeIconSize);

              { à íuèÓïÒ ([èÍèä:]) ï∂éöóÒÇï∂éöóÒïœêîÇ…ÉRÉsÅ[ }
              myWhereString := sessWhereStringPtr^;

              { DZÇÃéûì_Ç≈ÅAmyGetVolSessInfoRec Ç©ÇÁÉRÉsÅ[ǵÇΩÇ©ÅA}
              { Ç‹Çæ myGetVolSessInfoRec Ç…écǡǃǢÇÈèÓïÒÇÕÇ∑Ç◊ǃóòópâ¬î\ }

              DisposHandle(myIconHandle);
            END;
        END;
      DoGetVolSessionInfo := err;
    END;

ÉZÉbÉVÉáÉìéÿópÇÃÉãÅ[ÉãÇΔêßñÒDžǬǢǃÇÃíçà”: Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ©ÇÁ AFP ÉZÉbÉVÉáÉìÇéÿópÇ∑ÇÈÉvÉçÉOÉâÉÄÇÕÅADZÇà TECHNOTE Ç…ãLç⁄Ç≥ÇÍǃǢÇÈêßñÒÇéÁÇÁÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

ÉAÉbÉvÉãǙDZÇÍÇ‹Ç≈ AFPSVolInfo ÇÉhÉLÉÖÉÅÉìÉgǵǃǢǻǩǡÇΩÇÃÇ…ÇÕê≥ìñÇ»óùóRǙdžÇËÇ‹Ç∑ÅBAFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇÕÉZÉbÉVÉáÉìÇ≈ÉÜÅ[ÉUÇãÊï ÇµÇƒÇ®ÇËÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕÅAÉIÅ[ÉvÉìíÜÇà AFP É{ÉäÉÖÅ[ÉÄ (Ç®ÇÊǗǪÇÃì‡óe) DžǬǢǃàÍíËÇÃâºíËÇ…äÓÇ√ǢǃèàóùÇêiÇflÇ‹Ç∑ÅBMacintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™èäóLÇ∑ÇÈÉZÉbÉVÉáÉìÇïsê≥Ç…égópÇ∑ÇÈÇΔÅAAppleShare ÉGÉNÉXÉ^Å[ÉiÉãÅEÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ‚ÉtÉ@ÉCÉãÉTÅ[ÉoÇç¨óêÇ≥ÇπǃǵNjǧâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™èäóLǵǃǢÇÈ AFP ÉZÉbÉVÉáÉìÇéÿópÇ∑ÇÈèÍçáÇ…äÓñ{ìIÇ…éÁÇÈÇ◊ǴDZÇΔÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ÅB

File Manager ä÷êîÇ≈Ç≈Ç´ÇÈDZÇΔÇÕÅAFile Manager ä÷êîÇégǡǃçsǡǃÇ≠ÇæÇ≥Ç¢ÅBAFP ÉRÅ[ÉãÇÕê‚ëŒégÇÌǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅB

DZÇÍÇ…äYìñÇ∑ÇÈÇÃÇÕÅAÉ{ÉäÉÖÅ[ÉÄÅAÉfÉBÉåÉNÉgÉäÅAÉtÉ@ÉCÉãÅAÉ{ÉäÉÖÅ[ÉÄÇÃÉfÉXÉNÉgÉbÉvÅEÉfÅ[É^ÉxÅ[ÉXÇÃÉIÅ[ÉvÉì/ÉNÉçÅ[ÉYÉRÅ[ÉãÅAÉtÉ@ÉCÉãÇ‚ÉfÉXÉNÉgÉbÉvÅEÉfÅ[É^ÉxÅ[ÉXÇäJǢǃǩÇÁÇ≈ǻǢÇΔégópÇ≈ǴǻǢÉRÅ[ÉãǻǫÇ≈Ç∑ÅBAFP ÉZÉbÉVÉáÉìÇï¬Ç∂ÇÈÇÃÇÕLJǡǃÇÃÇŸÇ©Ç≈Ç∑ÅBDZÇÍÇÁÇà AFP ëÄçÏÇçsǧèÍçáÇÕÅAÇ‹Ç∏ÅA.AFPTranslatorÉhÉâÉCÉoÇégǡǃÉtÉ@ÉCÉãÉTÅ[ÉoÇΔÇÃä‘Ç…êÍópÇà AFP ÉZÉbÉVÉáÉìÇäJǢǃÇ≠ÇæÇ≥Ç¢ÅB

ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ©ÇÁéÿópǵÇΩÉZÉbÉVÉáÉìÇégǡǃLJà¿ëSÇ» AFP ÉRÅ[ÉãÇÃàÍóóÇà»â∫Ç…é¶ÇµÇ‹Ç∑ÅBå¬ÅXÇà AFP ÉRÅ[ÉãÇ≤ÇΔÇ…ÅAFile Manager ä÷êîÇ≈ÇÕÇ≈ǴǻǢDZÇΔÇ≈ÅAAFP ÉRÅ[ÉãÇ≈Ç≈Ç´ÇÈDZÇΔÇê‡ñæÇµÇ‹Ç∑ÅB

  • afpGetSParms - ÉTÅ[ÉoÇÃéûçèÇ‚ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃàÍóóÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉ{ÉäÉÖÅ[ÉÄÇ≤ÇΔÇ…ÅAÉpÉXÉèÅ[ÉhÇ≈ï€åÏÇ≥ÇÍǃǢÇÈÇ©ÅAApple II ê›íËèÓïÒÇä‹ÇfiǩǫǧǩÇí≤Ç◊ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB
  • afpSetVolParms - É{ÉäÉÖÅ[ÉÄÇÃÉoÉbÉNÉAÉbÉvì˙ïtÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  • afpChangePassword - ÉÜÅ[ÉUÇÃÉpÉXÉèÅ[ÉhÇïœçXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  • afpGetUserInfo - éwíËÇ≥ÇÍÇΩÉÜÅ[ÉUÇÃÉÜÅ[ÉU ID Ç‚ÉvÉâÉCÉ}ÉäÉOÉãÅ[Év ID ÇéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  • afpGetSrvrMsg - åªç›ÅAç≈èâÇ…ï\é¶Ç≥ÇÍÇÈÉÅÉbÉZÅ[ÉWÇ‚ÉTÅ[ÉoÇÃÉÅÉbÉZÅ[ÉWÇéÊìæÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉRÅ[ÉãÇÕ AFP 2.1 ÉTÅ[ÉoÇ≈ÇÃÇ›ÉTÉ|Å[ÉgÇ≥ÇÍÇ‹Ç∑ÅBíçà”: ÉTÅ[ÉoÉÅÉbÉZÅ[ÉWÇÕÉÜÅ[ÉUÇ…ÇÕäYìñǵNjÇπÇÒÅB
  • afpMiscUserCommand - ÉfÉxÉçÉbÉpópÇ…ó\ñÒÇ≥ÇÍǃǢNjÇ∑ÅBÅwTechnote 323 Arbitrating Use of afpMiscUserCommand and afpMiscUserWriteÅxÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
  • afpMiscUserWrite - ÉfÉxÉçÉbÉpópÇ…ó\ñÒÇ≥ÇÍǃǢNjÇ∑ÅBÅwTechnote 323 Arbitrating Use of afpMiscUserCommand and afpMiscUserWriteÅxÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

àÍóóÇÕÇ‹Çæë±Ç´Ç‹Ç∑Ç™ÅAà»â∫ÇÃÉRÅ[ÉãÇÕÅAFile Manager ä÷êîÇ≈ÇÕÉAÉNÉZÉXÇ≈ǴǻǢèÓïÒ (ProDOS èÓïÒǻǫ) ÇéÊìæÇµÇΩÇËÅAê›íËÇµÇ»ÇØÇÍnjǻÇÁǻǢèÍçáÇÃÇ›égópǵǃÇ≠ÇæÇ≥Ç¢ÅB

  • afpEnumerate - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇ™ïKóvÇ»èÍçáÇ…ÅAÉfÉBÉåÉNÉgÉäÇÃì‡óeÇéQèΔÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÃëºÇÃñ⁄ìIÇ…ÇÕÅAFile Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
  • afpGetVolParms - ì¡íËÇÃÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÃÉpÉâÉÅÅ[É^ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBí èÌÇÃèÍçáÇ…ÇÕÅAFile Manager Çà PBHGetVInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
  • afpSetDirParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBëºÇÃÇ∑Ç◊ǃÇÃópìrÇ…ÇÕÅAFile Manager Çà PBSetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
  • afpSetFileParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBëºÇÃÇ∑Ç◊ǃÇÃópìrÇ…ÇÕÅAFile Manager Çà PBSetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
  • afpGetFlDrParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇ™ïKóvÇ»èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇ‚ÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÍà»äOÇÃópìrÇ…ÇÕÅAFile Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB
  • afpSetFlDrParms - ProDOS èÓïÒÇ‚ì¡íËÇÃÉtÉ@ÉCÉãÇ‚ÉfÉBÉåÉNÉgÉäÇÃëÆê´èÓïÒÇê›íËǵÇΩÇ¢èÍçáÇ…ÅAéwíËÇÃÉfÉBÉåÉNÉgÉäÇ‚ÉtÉ@ÉCÉãÇÃÉpÉâÉÅÅ[É^Çê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBDZÇÍà»äOÇÃópìrÇ…ÇÕÅAFile Manager Çà PBGetCatInfo ä÷êîÇégópÇ∑Ç◊Ç´Ç≈Ç∑ÅB

AppleShare 3.0 (Ç‹ÇΩÇÕǪÇÍà»ç~) Çà Chooser Extension Ç System 6 Ç≈égópÇ∑ÇÈèÍçáÅAAFP 2.1 ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ëŒÇµÇƒÅAéüÇà AFP 2.1 ÉRÅ[ÉãÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÍÇÁÇÃÉRÅ[ÉãÇÕ System 6 Çà File Manager Ç≈ÇÕÉTÉ|Å[ÉgÇ≥ÇÍÇ‹ÇπÇÒÅB

  • afpGetSrvrMsg - è„ãLÇÃàÍóóÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
  • afpCreateID - éwíËÇÃÉtÉ@ÉCÉãÇ…ëŒÇµÇƒÉÜÉjÅ[ÉNÇ» fileID ÇçÏê¨Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
  • afpDeleteID - éwíËÇà fileID ÇÃÉCÉìÉXÉ^ÉìÉXÇÇ∑Ç◊ǃñ≥å¯Ç…Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
  • afpResolveID - éwíËÇà fileID ÇÃèÓïÒ (ÉtÉ@ÉCÉãÇÃà íuǻǫ) ÇéÊìæÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
  • afpExchangeFiles - ÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄè„Çà 2 ǬÇÃÉtÉ@ÉCÉãÇÃì‡óeÇåä∑Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
  • afpCatSearch - éwíËÇÃèåèÇΔàÍívÇ∑ÇÈÉtÉ@ÉCÉãÇ‚ÉtÉHÉãÉ_ÇãÅÇflǃÉ{ÉäÉÖÅ[ÉÄÇåüçıÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

Ç‹ÇΔÇfl

Macintosh ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ≈ÇÕÉTÉ|Å[ÉgÇ≥ÇÍǃǢǻǢï˚ñ@Ç≈ AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ÉAÉNÉZÉXÇ∑ÇÈïKóvÇÃdžÇÈÉfÉxÉçÉbÉpÇÕÅA.AFPTranslator ÉhÉâÉCÉoÇ÷Çà AFPSVolInfo ÉXÉeÅ[É^ÉXÉRÅ[ÉãÇégǡǃóLâvÇ»èÓïÒÇéÊìæÇµÇƒÇ≠ÇæÇ≥Ç¢ÅBǵǩǵǻǙÇÁÅADZÇà TECHNOTE Ç…ãLç⁄Ç≥ÇÍÇΩêßñÒÇéÁÇËÅAÉNÉâÉCÉAÉìÉgÇà Macintosh Ç‚ AFP ÉtÉ@ÉCÉãÉTÅ[ÉoÇ…ñ‚ëËÇãNDZÇ≥ǻǢÇÊÇ§Ç…ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

éQçlï∂å£

  • ÅwInside MacintoshÅxVolume VÅuThe AppleTalk ManagerÅv
  • ÅwM.NW.afpMiscUserCommandÅx
  • ÅwInside AppleTalkÅxëÊ 2 î≈ÅuAppleTalk Filing ProtocolÅv
  • ÅwAppleShare 3.0 Developer's Kit, AppleTalkÅxÇÃÅuFiling Protocol Version 2.1Åv

çXêVì˙: 1997 îN 9 åé 30 ì˙